package com.example.demo;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

public class AutoGenMP {
    public static void main(String[] args) {
        // 1. 创建生成器对象，并配置数据库连接
        FastAutoGenerator.create("jdbc:mysql://192.168.12.130:3306/demo" +
                                "?useUnicode=true&characterEncoding=utf-8&useSSL=false" +
                                "&serverTimezone=Asia/Shanghai" +
                                "&useInformationSchema=true" +            // 读取表注释用
                                "&nullCatalogMeansCurrent=true",
                        "root",
                        "191151084")


                // 2. 全局配置
                .globalConfig(builder -> builder
                        .author("gax") // 生成的文件注释中标注的作者名
                        .outputDir("D:/demo_mp_autogen/") // 生成的代码位置，代码会输出到此目录下
                        .dateType(DateType.ONLY_DATE) // 数据库中日期类型（Date/TimeStamp）对应实体类中的类型，ONLY_DATE 表示只用 java.util.Date
                        .disableOpenDir() // 生成完成后不自动打开输出目录
                )
                // 3. 包配置：指定生成的代码所在的包结构
                .packageConfig(builder -> builder
                        .parent("com.example.demo") // 父包名，所有生成的代码都会在这个包下
                        .entity("pojo") // Entity 实体类所在的包名
                        .mapper("mapper") // Mapper接口所在的包名
                        .xml("mapper.demo") // Mapper对应的XML文件所在的包名
                        .service("service") // Service接口所在的包名
                        .serviceImpl("service.impl") // Service实现类所在的包名
                        .controller("controller") // Controller控制器所在的包名
                )
                // 4. 策略配置：最核心的部分，定义生成规则和表匹配
                .strategyConfig(builder -> builder
                        // 4.1 设置需要生成代码的表名（白名单）
                        .addInclude(
                                "media_video",
                                "user",
                                "user_purchase")

                        // 4.2 实体类(Entity)生成策略
                        .entityBuilder()
                        .enableLombok() // 使用Lombok注解（如@Data），省略getter/setter等方法
                        // 4.3 服务(Service)生成策略
                        .serviceBuilder()
                        // 4.4 控制器(Controller)生成策略
                        .controllerBuilder()
                        .enableRestStyle() // 生成 REST 风格的控制器（使用@RestController, @GetMapping等注解）
                )
                // 5. 指定模板引擎（Freemarker）
                .templateEngine(new FreemarkerTemplateEngine())
                // 6. 执行生成操作
                .execute();
    }
}
